/**
 * @author 黄波
 * 创建日期：2011Aug 27, 2011
 * TODO// N/A
 */
package com.platform.manager.bo;

import java.util.ArrayList;
import java.util.List;

import com.platform.dao.BaseDao;
import com.platform.pojo.GroupPower;
import com.platform.pojo.Module;
import com.platform.pojo.PowerModule;
import com.platform.pojo.UserInfo;

public class ModuleBo {

	/**
	 * 根据用户ID，查询当前用户所具有的模块列表信息
	 * @param userId
	 * @return
	 */
	public List<Module> getUserModules(int userId) {
		List<Module> modules = new ArrayList<Module>();
		//查询当前用户所在的用户组
		String hql1 = "from UserInfo where id=" + userId;
		UserInfo user = (UserInfo)BaseDao.getUniqueResult(hql1);
		if(user == null) {
			return null;
		}
		//根据用户组ID，查询用户组所具有的权限列表
		String hqlGetPowers = "from GroupPower where groupId=" + user.getGroupId();
		List<GroupPower> groupPowers = BaseDao.getList(hqlGetPowers);
		//遍历所有的组权限，查询该用户组所有权限
		for(GroupPower groupPower : groupPowers) {
			Integer powerId = groupPower.getPowerId();
			//根据权限ID,查询权限实体
//			String hqlGetPower = "from Power where id=" + powerId;
//			Power power = (Power)BaseDao.getUniqueResult(hqlGetPower);
			//根据权限ID，查询模块信息
			String hqlGetModules = "from PowerModule where powerId=" + powerId;
			List<PowerModule> powerModules = BaseDao.getList(hqlGetModules);
			for(PowerModule powerModule : powerModules) {
				//过滤modules，将重复的去除
				if(contains(powerModule.getModuleId(), modules)) {
					continue;
				}
				String hqlGetModule = "from Module where id=" + powerModule.getModuleId();
				modules.add((Module)BaseDao.getUniqueResult(hqlGetModule));
			}
		}
		//根据用户组ID查询该用户组所有的模块列表
//		StringBuffer hql = new StringBuffer();
//		hql.append("from UserModule where groupId=").append(user.getGroupId());
//		List<GroupModule> userModules = BaseDao.getList(hql.toString());
//		//根据模块列表中模块的ID，取得对应的模块实体信息
//		List<Module> modules = new ArrayList<Module>();
//		for(GroupModule userModule : userModules) {
//			StringBuffer hql2 = new StringBuffer();
//			//首次查询，只查询非叶子节点，即superId=0
//			hql2.append("from Module where superId=0 and id=").append(userModule.getModuleId());
//			Module module = (Module)BaseDao.getUniqueResult(hql2.toString());
//			if(module != null) {
//				modules.add(module);
//			}
//		}
		return modules;
	}
	
	/**
	 * 判断模块列表中是否包含传入的ID
	 * @param moduleId
	 * @param modules
	 * @return
	 */
	private boolean contains(Integer moduleId, List<Module> modules) {
		for(Module module : modules) {
			if(module.getId() == moduleId) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 根据父节点ID，查询子节点列表
	 * @param superId
	 * @return
	 */
	public List<Module> getChildModules(String superId) {
		StringBuffer hql = new StringBuffer();
		hql.append("from Module where superId=").append(superId);
		return BaseDao.getList(hql.toString());
	}
	
	/**
	 * 根据ID查询模块信息
	 * @param id
	 * @return
	 */
	public Module getModule(String id) {
		String hql = "from Module where id=" + id;
		return (Module)BaseDao.getUniqueResult(hql);
	}
	
	/**
	 * 查询父节点模块(父节点为0)
	 * @return
	 */
	public List<Module> getSuperModule() {
		String hql = "from Module where superId=0";
		return BaseDao.getList(hql);
	}
}
